使用UTF8进行MySQL命令行格式化

spi*_*ier 62 mysql utf-8

我有一个包含瑞典语/挪威语字符串的数据库表.

当我查询一些数据时,我得到如下输出:

输出用 set names latin1;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interi#####                   | 
| Bwg Homes                         | 
| If Skadef####kring                | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+
Run Code Online (Sandbox Code Playgroud)

现在如果我set names utf8;为了看到具有正确编码的字符,则MySQL命令行的表格输出的格式化会中断.

输出用 set names utf8;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interiør                     | 
| Bwg Homes                         | 
| If Skadeförsäkring              | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+
Run Code Online (Sandbox Code Playgroud)

题:

这不是一个大问题,但它使输出更难阅读.有人知道如何保持表格格式完整吗?

Mar*_*ski 111

简短的回答

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

mysql --default-character-set=utf8
Run Code Online (Sandbox Code Playgroud)

您可以将其设置为/etc/mysql/my.cnf文件中的默认值.

[mysql]
default-character-set=utf8
Run Code Online (Sandbox Code Playgroud)

简短的回答没有用,请读下面

上面的命令强制character_set_client,character_set_connectioncharacter_set_results配置变量是utf8.

为了检查所有与charset相关的配置变量的值,您可以运行:

show variables like '%char%';
Run Code Online (Sandbox Code Playgroud)

character_set_database为您提供了当前所在的数据库(模式)的字符集.默认情况下,模式和表是使用指定的字符集创建的character_set_server,除非在CREATE语句中明确指定.

character_set_server可以在中更改my.cnf文件:

[mysqld]
character-set-server = utf8
Run Code Online (Sandbox Code Playgroud)

此外,表和列可以拥有自己的字符集,这些字符集可能与其父表或模式不同.要专门检查数据库中每个表和列的值,请参阅以下答案: 如何查看MySQL数据库/表/列的字符集是什么?

如果要更改现有表和列的字符集,请参阅以下答案:如何将整个MySQL数据库字符集和排序规则转换为UTF-8?

有关mysql docsumentation中连接字符集的更多信息.

一切都设置为utf8,但我仍然看到奇怪的角色

即使将所有字符集变量,表和列设置为utf8,也可能会出现屏幕上看到奇怪字符的情况.例如,有人可能utf8通过具有latin1连接的客户端(例如通过运行mysql --default-character-set=utf8)在列中编写Unicode字符.在这种情况下,您需要使用与写入值相同的字符集连接到数据库.您还可以通过正确的编码检索和重写它们.

注意:正如评论所指出的,myslq utf8编码不是UTF-8的真实和完整实现.如果需要完整的UTF-8实现,可以使用utf8mb4charset:

mysql --default-character-set=utf8mb4
Run Code Online (Sandbox Code Playgroud)

更多信息:MySQL中的utf8mb4和utf8字符集有什么区别?

  • 我不确定语句"This [--default-character-set = utf8]强制将character_set_client,character_set_connection和character_set_results变量强制为UTF8."是对的,因为mysql也得到了utf8mb4字符集,这是他们的真实执行UTF8.mysql的utf8只使用3个字节,省去了UTF8表的一系列字符 (2认同)