Windows上MySQL命令行中的非英文字符

时间:2016-03-22 06:00:36

标签: mysql windows mysqli command-line

表格是用:

创建的
 CREATE TABLE IF NOT EXISTS `mathsqs` (
       `questions` varchar(5000) NOT NULL,
 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

我使用mysqli通过PHP插入数据 为了确认插入,我在Windows命令行上尝试了SELECT * FROM mathsqs LIMIT 1。它显示非英语字符的问号。

如何在MySql命令行中查看确切的发布数据?

我正在尝试处理的示例数据:

  

இருஇரு்களின்பெருக்கல்பலன்3375அவ்வெண்களின்மீ.பெ.வ15

1 个答案:

答案 0 :(得分:3)

假设您已将表char设置为utf8,并且它的排序规则为utf8。

尝试在$ mysqli命令之前添加此行:

$mysqli->set_charset("utf8")

此外,在页面标题中设置utf 8编码,此输出即将到来。

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

更新

从命令行运行sql时,请确保在启动mysql客户端之前设置了默认的charset属性。类似的东西:

使用选项--default-character-set = utf8启动客户端。

mysql --default-character-set=utf8

要将其设置为每次运行mysql客户端时自动包含的默认选项,请在my.cnf文件中添加一个条目,在[mysql]部分中:

[mysql]
default-character-set=utf8

更新#2:

@GopsAB我运行了DML语句来创建您指定的表。遵循相同的过程,令人惊讶的是,我遇到了同样的问题。我无法弄清楚为什么即使在强制执行字符编码后也会显示问号。

所以我进一步挖掘并确保命令提示符设置为使用'Lucidia Console'字体和活动页面代码chcp 65001,通过将控制台的属性设置为使用'Lucidia Console'字体然后运行:{ {1}}并遵循相同的流程。

但是现在而不是'?'标记我正在获取BOM字符框....但令人惊讶的是,当我复制为列的值显示的控制台文本时,我收到了正确的文本:chcp 65001(这是直接粘贴的控制台)。奇怪啊!

重要!

原来MySQL的utf8字符集只能部分实现正确的UTF-8编码。它只能存储由一到三个字节组成的UTF-8编码符号;不支持占用四个字节的编码符号。

在您的情况下,字符存储完美,并在php页面和mysql编辑器(如sql workbench或Toad for SQL)中正确检索它们。即使在如上所述设置适当的编码和页面类型之后,只有命令行界面才能出于某些奇怪的原因而无法显示它们。复制/粘贴时控制台中显示的文本在记事本或您可以键入的任何其他位置正确显示。

运行போக்குவரத்துSET NAMES 'big5';也没有任何影响

并且SET NAMES 'utf8';都没有做任何新的事情,只显示了复制/粘贴时的实际值,但是在框中屏蔽了控制台本身。

所以直到这里你很好! SQL中没有任何问题,数据库中存储的值很好并且可以正确获取。

  

额外的东西:

MySQL的utf8mb4

幸运的是,MySQL 5.5.3(2010年初发布)引入了一个名为utf8mb4的新编码,它映射到正确的UTF-8,因此完全支持Unicode,包括星体符号。

从MySQL的utf8切换到utf8mb4

对于每个数据库:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

对于每张桌子:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

每列:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191)CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; (不要盲目地复制粘贴!确切的声明取决于列类型,最大长度和其他属性。上面的行只是SET collation_connection = utf8_unicode_ci; SET NAMES utf8;列的一个示例。)

MySQL的utf8mb4参考: How to support full Unicode in MySQL databases