Mysql字符集的问题,更改数据库的字符集问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql字符集的问题,更改数据库的字符集问题?相关的知识,希望对你有一定的参考价值。

我安装的 APPSERV 套件 appserv-win32-2.5.7.exe (最新版)

安装后功能正常,但是从页面插入的中文不能真确显示,插入后在数据库里显示为 "????";
phpMyAdmin下可以插入中文,但是,从页面读出也显示为 "?????";

问了好久,知道这个是字符集问题了,在 phpMyAdmin 首页显示有下面内容:

服务器版本: 5.0.24a-community-nt-log
Protocol version: 10
服务器: localhost via TCP/IP
用户: root@localhost
mysql 字符集: UTF-8 Unicode (utf8)
MySQL 连接校对:gb2312_chinese_ci

这个意思就是这个数据库的字符集是 UTF-8 Unicode (utf8) 了,现在的问题就是:
怎么把字符集改成 gb2312;

由于这个版本是新的,在网上这方面的东西还比较少,我找了好都试了都不行,希望那位高手救助,如果您的版本和我的一样,你有过这样的问题吗,怎么解决的,谢谢!期待有人回答,呵呵,明天早上起来看,希望不要沉入大海才是!
我的操作系统 win server 2003

参考技术A 码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。

只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:

$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
mysql_query("SET NAMES 'GBK'");本回答被提问者采纳
参考技术B 编码

如何对mysql中的字符进行编码转换

参考技术A utf8编码可以支持一到4字节的字符编码,在mysql用我们一般使用utf8编码来处理字符类型,通常情况下都没有问题,但遇到4字节编码的字符,在数据存取的时候就会有问题了。
  通常我们可能会得到一个错误或者警告:incorrect
string
value:
'\xf0\x9d\x8c\x86'
for
column
...
  mysql
从5.5.3版本开始支持4字节的utf8编码,如果你的mysql数据库是5.5.3+,按照以下步骤就能解决这个问题,如果版本低于5.5.3,是不是可以考虑升级数据库版本呢?
  1、在修改数据库编码前先对数据库备份(虽然utf8mb4兼容utf8,但有备无患)
  2、修改数据库的编码、表的编码、列的编码为utf8mb4
  3、在mysql数据库配置文件(my.ini)中加入如下设置
  [client]
default-character-set
=
utf8mb4
[mysql]
default-character-set
=
utf8mb4
[mysqld]
character-set-client-handshake
=
false
character-set-server
=
utf8mb4
collation-server
=
utf8mb4_unicode_ci
  重新启动mysql数据库,确认设置生效
  mysql>
show
variables
like
'%char%';
+--------------------------+----------------------------------------+
|
variable_name
|
value
|
+--------------------------+----------------------------------------+
|
character_set_client
|
utf8
|
|
character_set_connection
|
utf8
|
|
character_set_database
|
utf8mb4
|
|
character_set_filesystem
|
binary
|
|
character_set_results
|
utf8
|
|
character_set_server
|
utf8mb4
|
|
character_set_system
|
utf8
|
|
character_sets_dir
|
/home/app/mysql-5.5.33/share/charsets/
|
+--------------------------+----------------------------------------+
8
rows
in
set
  4、在获取数据库连接的时候执行sql:set
names
utf8mb4;我使用的是alibaba的开源数据库连接池程序,在配置文件中增加一行如下配置
重新启动应用程序,问题解决,转载,仅供参考。
参考技术B 首先,到mysql\bin
下面,利用mysqldump这个工具,执行以下命令:
mysqldump
--u=root
-p
--default-character-set=latin1
--set-charset=utf8
--skip-opt
--result-file=c:\mytable.sql
mydb
mytable
其中:root
为数据库登录名,
latin1
为源表(就是想进行转码的表)的编码,
utf8
为想转换成的编码,
c:\mytable.sql
为导出的数据的存放文件(临时用),
mydb是源表所属的数据库(schema),mytable
就是源表名了
执行这条命令,会提示输入密码,输入正确的密码以后,就开始导出数据了。等到数据全部导出以后,可以用ue等工具打开,这时可以看到这些数据的编码已经转变了。
然后需要对这个文件进行一点点更改。在文件的最开头有一个建表语句。类似于:
Java代码
CREATE
TABLE
`mytable`
(
`tableid`
bigint(20)
unsigned
NOT
NULL,
`c1`
int(10)
unsigned
NOT
NULL
default
'0',
`c2`
int(10)
unsigned
NOT
NULL
default
'0',
PRIMARY
KEY
(`tableid`)
);
注意看最后的分号,缺少了一点点东西:engine=myisam
DEFAULT
CHARSET=utf8
engine

charset
的意义地球人都知道啊...
将这一段加进去。结果可能是这样:
Java代码
CREATE
TABLE
`mytable`
(
`tableid`
bigint(20)
unsigned
NOT
NULL,
`c1`
int(10)
unsigned
NOT
NULL
default
'0',
`c2`
int(10)
unsigned
NOT
NULL
default
'0',
PRIMARY
KEY
(`tableid`)
)
engine=myisam
DEFAULT
CHARSET=utf8;
其中engine

charset
改成期望的东西,如:innodb
gbk
等...
保存文件。(如果是用UE等工具即使文件大也不会等太久,如果用记事本打开的……恭喜你!

这样就成功了一半了,剩下的工作只需要导入这个转好码的数据了。
将原来的那个表改名,一是为了备份,二是防止导入的时候说表已经存在。
然后还是进入mysql\bin
下面,运行:
Java代码
mysql
-u
root
-p
mydb
<
c:\mytable.sql
输入密码以后程序开始工作,一段时间以后,新表就出来咯...

以上是关于Mysql字符集的问题,更改数据库的字符集问题?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 更改数据库字符编码的方法

mysql设置字符集后不提交更改

MySQL - 错误 1071 阻止更改字符集/排序规则,“指定的键太长......”

MYSQL 第十章 MySQL事务和字符集

如何在整个数据库中更改 CHARACTER SET(和 COLLATION)?

mysql设置字符集CHARACTER SET