一尘不染

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

mysql

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

查询某些数据时,将得到如下输出:

输出与 set names latin1;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interi#####                   | 
| Bwg Homes                         | 
| If Skadef####kring                | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

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

输出与 set names utf8;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interiør                     | 
| Bwg Homes                         | 
| If Skadeförsäkring              | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

题:

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


阅读 654

收藏
2020-05-17

共1个答案

一尘不染

简短答案

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

mysql --default-character-set=utf8

您可以在/etc/mysql/my.cnf文件中将此设置为默认值。

[mysql]
default-character-set=utf8

简短的答案不起作用,请看下面的波纹管

上述部队的命令character_set_clientcharacter_set_connectioncharacter_set_results配置变量是utf8

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

show variables like '%char%';

character_set_database给你的字符集当前数据库(模式)的,你是在该模式和表默认创建在指定的字符集character_set_server,除非是在明确指定CREATE的语句。

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

[mysqld]
character-set-server = utf8

此外,表和列可以具有自己的字符集,这可能与其父表或架构不同。要专门检查数据库中每个表和列的值,请参见以下答案:
如何查看MySQL数据库/表/列的字符集?

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

有关连接字符集的更多信息,请参见mysql文档

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

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

注意 :正如评论所指出的那样,myslq
utf8编码不是UTF-8的真实完整的实现。如果需要完整实现UTF-8,则可以使用utf8mb4字符集:

mysql --default-character-set=utf8mb4

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

2020-05-17