在MYSQL数据库中存储多语言/ unicode字符(泰语,印地语,philliphine)

时间:2015-06-05 07:19:07

标签: php mysql database unicode multilingual

我有一个MySQL数据库。我创建了一个具有以下定义的表格,该表格支持多种语言(印地语,泰语等)。

CREATE TABLE test_multi_lang
(
   language_name varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci
)

INSERT INTO test_multi_lang
(language_name )
VALUES
('ตัวอย่าง')

INSERT INTO test_multi_lang
(language_name )
VALUES
('नमूना') 

但是当我选择数据时。它将所有数据显示为??????

SELECT * FROM test_multi_lang

示例图片

我该如何解决这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:0)

这不是MySQL故障:数据未在客户端程序中正确输出。以下是我在Linux Slackware机器上的外观。原生MySQL控制台:

mysql> CREATE TABLE test_multi_lang
(
   language_name varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci
);

Query OK, 0 rows affected (0.35 sec)

mysql> insert into test_multi_lang
(language_name )
values
('ตัวอย่าง');


mysql> SELECT * FROM test_multi_lang;
+--------------------------+
| language_name            |
+--------------------------+
| ตัวอย่าง                 |
+--------------------------+

mysql>  SET NAMES latin1;

mysql> SELECT * FROM test_multi_lang;
+---------------+
| language_name |
+---------------+
| ????????      |
+---------------+

mysql>  SET NAMES utf8;

mysql> SELECT * FROM test_multi_lang;
+--------------------------+
| language_name            |
+--------------------------+
| ตัวอย่าง                 |
+--------------------------+

您会看到:我们一使用SET NAMES latin1,就会收到问号。尝试使用控制台应用程序连接到MySQL,并使用SET NAMES utf8

正如manual所说:

  

SET NAMES表示客户端将用于发送SQL的字符集   语句到服务器...它还指定服务器应该的字符集   用于将结果发送回客户端。

答案 1 :(得分:0)

您可以尝试在运行SELECT查询之前设置返回结果的字符集:

SET NAMES 'utf8'

SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'