【问题标题】:MySQL command line formatting with UTF8使用 UTF8 格式化 MySQL 命令行
【发布时间】:2011-10-10 21:31:50
【问题描述】:

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

当我查询一些数据时,我得到这样的输出:

输出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                      | 
+-----------------------------------+

问题:

这不是一个大问题,但它使输出有点难以阅读。有人知道如何保持表格格式不变吗?

【问题讨论】:

    标签: mysql utf-8


    【解决方案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 中指定的字符集创建,除非在@ 中明确指定987654336@声明。

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

    [mysqld]
    character-set-server = utf8
    

    此外,表和列可以有自己的字符集,这可能与它们的父表或架构不同。要专门检查数据库中每个表和列的值,请参阅此答案: How do I see what character set a MySQL database / table / column is?

    如果要更改现有表和列的字符集,请看这个答案:How to convert an entire MySQL database characterset and collation to UTF-8?

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

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

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

    注意:正如 cmets 所指出的,mysql utf8 编码并不是 UTF-8 的真正完整实现。如果需要完整的 UTF-8 实现,可以使用 utf8mb4 字符集:

    mysql --default-character-set=utf8mb4
    

    更多信息在这里:What is the difference between utf8mb4 and utf8 charsets in MySQL?

    【讨论】:

    • 这确实有帮助。所以像这样启动mysql命令行就可以了mysql --default-character-set=utf8
    • 我不确定语句“This [--default-character-set=utf8] 强制 character_set_client、character_set_connection 和 character_set_results 变量为 UTF8。”是正确的,因为 mysql 也有utf8mb4 字符集,这是他们对 UTF8 的真正实现。 mysql的utf8只用了3个字节,省略了UTF8表的一系列字符
    • 好吧,它强制它们成为 utf8,无论 utf8 在 mysql 中意味着什么。我已将其更改为小写,因此不会造成混淆。
    • @realnice 这个区别很好,而且有效。如果需要完整的 4 字节实现,则可以在命令行上使用 utf8mb4; mysql --default-character-set=utf8mb4
    【解决方案2】:

    这些带有utf8的单词“ø ö ä”需要2个字节,所以你忘记使用wchar或utf字符串了吗?

    这是我在 python 中的测试代码:

    s = ["Kid Interiør","Bwg Homes","If Skadeförsäkring"]
    for w in s:
        print '|',w.ljust(20,' '),'|' 
    

    结果和你的程序打印出来的一样。 我需要做的就是更改字符串s的编码:

    s = [u"Kid Interiør",u"Bwg Homes",u"If Skadeförsäkring"]
    for w in s:
        print '|',w.ljust(20,' '),'|'
    

    结果是

    | Kid Interiør         |
    | Bwg Homes            |
    | If Skadeförsäkring   |
    

    我没有在c++中测试过,但我建议你可以使用wchar,std::wcout。

    【讨论】:

    • OP 询问如何配置mysql-client
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2021-09-07
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多