如何以Unicode格式存储印地语数据

14

我正在使用 PHPMySQL 开发一款应用程序。

问题如下:

  1. 如何以可读格式或 नवीन खेतिहर उपकरण। 格式存储数据到 MySQL 中?

  2. 当用户在文本框中输入数据并单击提交时,我们会获得不同格式的数据。我们需要做什么来将其转换并以可读格式存储到 MySQL 中?


1
请阅读此链接:https://dev59.com/e2TWa4cB1Zd3GeqPH-ur - Sreenath S
4个回答

26

选择utf8字符集和utf8_general_ci排序规则。

显然,用于存储印地语文本的字段的排序规则应为utf8_general_ci

要更改表字段,请运行:

ALTER TABLE `<table_name>` CHANGE `<field_name>` `<field_name>` VARCHAR(100) 
CHARSET utf8 COLLATE utf8_general_ci DEFAULT '' NOT NULL;

连接到数据库后,首先运行以下语句

mysql_set_charset('utf8');

例:

//setting character set
mysql_set_charset('utf8');

//insert Hindi text
mysql_query("INSERT INTO ....");

获取数据

//setting character set
mysql_set_charset('utf8');

//select Hindi text
mysql_query("SELECT * FROM ....");

在您在浏览器上打印任何Unicode文本(比如印地文),您需要通过添加元标签来设置页面的内容类型。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Example Unicode</title>
</head>

<body>
<?php echo $hindiText; ?>
</body>
</html>

更新:

mysql_query("SET CHARACTER SET utf8")已经改为mysql_set_charset('utf8')。这是更推荐的方法来改变字符集。不建议使用mysql_query()来设置它(例如SET NAMES utf8)。请参见http://php.net/manual/en/function.mysql-set-charset.php*


谢谢,Raju。我已经设置了所有的东西,但我有一个问题: 1)在MySQL中应该以可读格式存储哪种数据格式,或者是其他格式,如:(a)नवीन(b)निलेस र पà; 2)另一件事,当我们从输入框中获取文本时,我们得到的数据是不可读的格式,那么如何转换它? - nilesh
1
@nilesh - 你可以以正常格式(如纯文本)存储数据。 如果你使用的第三方应用程序(不支持Unicode)来查看数据库中的数据,你可能会看到损坏的数据,但实际上它们在MySQL中是安全的! 请看我的更新: 你需要在MySQL端和浏览器端都设置字符集。 - rajukoyilandy
感谢@raju,我正在使用MySQL数据库和PHP前端。现在,当我在文本框中输入“किसानों के लिये एक नवीन उपकरण।”时,它以这种格式存储在数据库中:“किसानों के लिये à¤à¤• नवीन नवीन उपकरण।”。而当我检索时,它会再次正确显示为“किसानों के लिये एक नवीन उपकरण।”,所以我想知道是否有任何函数可以直接存储可读格式的“किसानों के लिये एक नवीन उपकरण।”。 - nilesh
@raju 谢谢,所以你认为存储的数据是完美的,不需要更改,因为我们将要输入超过10000个条目,那么你知道有哪些支持的函数或工具吗? - nilesh
请注意,如果您正在使用 mysqli,请使用以下代码设置字符集: mysqli_set_charset($db_conn,'utf-8'); - Alpha
显示剩余6条评论

3
您只需要在表上运行以下命令。
ALTER TABLE <tablename> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

注意:应该使用utf8_general_ci而不是ut8_unicode_ci,因为据说它更快。 utf8_general_ci和utf8_unicode_ci有什么区别?

1

不需要更改表的字符集。但是您的数据库应该使用 utf8_unicode_ci。

在连接数据库时,只需要添加这一行代码即可:"mysqli_set_charset($con,'utf8')"

    $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
    mysqli_set_charset($con, 'utf8');
    mysqli_query($con, $sql);

你是对的,它已经起作用了。我在MySQL中使用了存储引擎“myISAM”和排序规则“utfmb4_unicode_520_ci”,并在我的PHP中使用了mysqli_set_charset($con ,'utf8')。 - Lakhvir Singh

1
在将COLLATE转换为utf8_general_ci后,在查询语句下方的$con和mysqli_query()之间使用此行mysqli_set_charset($con,'utf8')。 $con = mysqli_connect($host,$user,$pass,$db)或die('无法连接'); $sql =“您的查询..”;
mysqli_set_charset($con,'utf8'); $result = mysqli_query($con,$sql);

您需要提及需要注意的特定方面,例如在此情况下,包括编码为“utf-8”以获取Unicode。 - NitinSingh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接