我有一个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
我该如何解决这个问题?
提前致谢。
答案 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'