首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用UTF8设置MySQL命令行格式

使用UTF8设置MySQL命令行格式
EN

Stack Overflow用户
提问于 2011-07-22 17:06:01
回答 2查看 67.7K关注 0票数 73

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

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

使用set names latin1;输出

代码语言:javascript
运行
复制
+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interi#####                   | 
| Bwg Homes                         | 
| If Skadef####kring                | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

现在,如果我使用set names utf8;来查看字符的正确编码,那么MySQL命令行的表格输出的格式就会中断。

使用set names utf8;输出

代码语言:javascript
运行
复制
+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interiør                     | 
| Bwg Homes                         | 
| If Skadeförsäkring              | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

问题:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-22 17:42:26

简短的回答

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

代码语言:javascript
运行
复制
mysql --default-character-set=utf8

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

代码语言:javascript
运行
复制
[mysql]
default-character-set=utf8

简短的回答不起作用,请阅读“咆哮”。

上面的命令强制character_set_clientcharacter_set_connectioncharacter_set_results配置变量为utf8

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

代码语言:javascript
运行
复制
show variables like '%char%';

character_set_database提供您所在的当前数据库(模式)的字符集。缺省情况下,除非在CREATE语句中显式指定,否则将使用character_set_server中指定的字符集创建模式和表。

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

代码语言:javascript
运行
复制
[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连接的客户端在utf8列中写入了Unicode字符(例如,通过运行mysql --default-character-set=latin1)。在这种情况下,您需要使用与写入的值相同的字符集连接到数据库。您还可以通过正确的编码来检索和重写它们。

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

代码语言:javascript
运行
复制
mysql --default-character-set=utf8mb4

更多信息请点击此处:What is the difference between utf8mb4 and utf8 charsets in MySQL?

票数 137
EN

Stack Overflow用户

发布于 2011-07-22 17:27:23

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

下面是我用python编写的测试代码:

代码语言:javascript
运行
复制
s = ["Kid Interiør","Bwg Homes","If Skadeförsäkring"]
for w in s:
    print '|',w.ljust(20,' '),'|' 

结果与您的程序打印出来的结果相同。我所需要做的就是更改字符串s的编码

代码语言:javascript
运行
复制
s = [u"Kid Interiør",u"Bwg Homes",u"If Skadeförsäkring"]
for w in s:
    print '|',w.ljust(20,' '),'|'

结果是

代码语言:javascript
运行
复制
| Kid Interiør         |
| Bwg Homes            |
| If Skadeförsäkring   |

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6787824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档