`
waiting
  • 浏览: 234848 次
  • 性别: Icon_minigender_1
  • 来自: cq
社区版块
存档分类
最新评论

MySQL COMPACT栏格式导致输出乱码

阅读更多
CentOS 5.2, PHP 5.1.6, MYSQL 5.0.77. 数据库UTF8,表MYISAM引擎,采用PEAR::MDB2访问。
读取出的中文会有乱码尾巴。使用EMS/navicat查看数据都正常。折腾半天最后发现应该和表的Row format格式有关:如果使用COMPACT格式则会出现记录输出时中文文字后面跟着乱码。即使把格式改成Dynamic已有的记录在输出时还是有乱码,估计是这条记录的row结构并未更新,手动更新这条记录的中文后(这条记录)在输出时就不会出现乱码尾巴了。

查询资料,关于compact row format:
引用
#

InnoDB tables use a compact storage format. In versions of MySQL earlier than 5.0.3, InnoDB rows contain some redundant information, such as the number of columns and the length of each column, even for fixed-size columns. By default, tables are created in the compact format (ROW_FORMAT=COMPACT). If you wish to downgrade to older versions of MySQL, you can request the old format with ROW_FORMAT=REDUNDANT.

The presence of the compact row format decreases row storage space by about 20% at the cost of increasing CPU use for some operations. If your workload is a typical one that is limited by cache hit rates and disk speed it is likely to be faster. If it is a rare case that is limited by CPU speed, it might be slower.

The compact InnoDB format also changes how CHAR columns containing UTF-8 data are stored. With ROW_FORMAT=REDUNDANT, a UTF-8 CHAR(N) occupies 3 × N bytes, given that the maximum length of a UTF-8 encoded character is three bytes. Many languages can be written primarily using single-byte UTF-8 characters, so a fixed storage length often wastes space. With ROW_FORMAT=COMPACT format, InnoDB allocates a variable amount of storage in the range from N to 3 × N bytes for these columns by stripping trailing spaces if necessary. The minimum storage length is kept as N bytes to facilitate in-place updates in typical cases.


引用
# 在MySQL/InnoDB中,InnoDB表使用更紧凑的存储格式。在以前版本的MySQL中,InnoDB记录包含一些冗余信息,例如列数目和每个列的长度,即使对于固定大小的列。默认情况,创建的表为紧凑格式(ROW_FORMAT=COMPACT)。如果想要降级旧版本的MySQL/InnoDB,可以用ROW_FORMAT=REDUNDANT要求旧的格式。
# 紧凑的InnoDB格式也改变了包含UTF-8数据的CHAR列的保存方式。在ROW_FORMAT=REDUNDANT格式中,UTF-8 CHAR(n)占用3*n字节,假定UTF-8编码的字符的最大长度是3字节。许多语言可以主要用单字节UTF-8字符来编写,固定的存储长度通常会浪费空间。通过根据需要剥离尾部的空格,ROW_FORMAT=COMPACT格式为这些列分配可变数量的n..3*n字节。最小存储长度按顺序保存为n字节,以在典型情况下帮助更新。

http://www.guduo.net/2009/04/000189.html

估计是compact紧凑格式使得中文字符在保存时有问题,或者是导致在输出时不能正常判断字符切分位置。
不过我发现InnoDB格式似乎并不能指定compact row format.
分享到:
评论

相关推荐

    mysql中文乱码问题

    在 MySQL 中,中文乱码问题通常是由于 character_set_server 变量的设置不正确所导致的。默认情况下,character_set_server 变量的值是 latin1,這导致了中文乱码问题的出现。另外,数据库的编码方式也可能是导致...

    mysql乱码解决方法

    当从MySQL 4.1以下版本升级到4.1及以上版本时,可能会出现字符集兼容性问题,导致乱码。解决方法包括: - 确保所有数据库、表、字段的字符集设置为UTF-8。 - 如果是从非UTF-8编码的数据导入,需要先将数据文件...

    解决jsp+MysQL输入和输出中文乱码的方法!

    解决jsp+MysQL输入和输出中文乱码的方法! 解决jsp+MysQL输入和输出中文乱码的方法!

    在DELPHI中使用MyDAC连接MySQL数据库时中文显示乱码的解决方法

    1. **客户端与服务器端编码不一致**:DELPHI客户端与MySQL服务器端的字符编码设置不一致是导致中文乱码的主要原因。 2. **数据库表的字符集设置**:如果MySQL数据库中的表字符集不是统一的UTF-8,那么在查询时就可能...

    java插入mysql中文乱码解决

    1. **字符集不一致**:如果Java程序、JDBC驱动、MySQL服务器以及数据库表的字符集设置不一致,就会导致中文乱码。例如,如果Java程序使用的是GBK编码,而MySQL服务器使用的是UTF-8编码,则会导致乱码。 2. **连接...

    Mysql运行SQL语句中文乱码问题的解决方法

    ### MySQL运行SQL语句中文乱码问题的解决方法 在MySQL数据库中运行包含中文字符的SQL语句时,经常会遇到中文显示为乱码的问题。这一现象不仅降低了开发效率,还可能导致数据错误。本文将详细介绍如何彻底解决MySQL...

    向MySQL数据库存中文显示乱码

     数据库是我们软件开发中一个非常重要的组成部分,以前小编使用的是SQL Server,没有遇到过存储的中文是乱码的情况,后来在ssh的项目中使用的是MySQL的项目,遇到了乱码的问题,只要向数据库中存储中文数据会是...

    pb导入mysql5.0中中文乱码

    pb 导入 mysql5.0 中中文乱码问题解决方案 在使用 Pb 将数据导入到 MySQL 5.0 时,中文乱码问题是一个常见的问题。在本文中,我们将讨论两个解决方案,帮助开发者快速解决中文乱码问题。 解决方案一:使用 set ...

    MySQL数据库—乱码总结

    MySQL数据库中的乱码问题通常出现在数据的输入、存储以及输出过程中,主要原因是字符集设置不一致导致。例如,在客户端(如JDBC连接)和服务器端之间存在不同的字符集设置,或者在数据库内部不同层级的字符集设置不...

    MySQl处理乱码

    MySQL是世界上最流行的开源关系型数据库管理系统之一,但在处理数据时,有时可能会遇到字符编码问题,导致乱码。本文将深入探讨MySQL处理乱码的相关知识点,包括字符集的概念、乱码产生的原因、解决方法以及如何避免...

    mysql乱码问题解决

    MySQL作为广泛使用的开源关系型数据库管理系统之一,在实际应用中也难免会遇到字符集不匹配导致的数据乱码问题。本文将详细探讨如何识别与解决MySQL中的乱码问题,并提供具体的操作步骤及注意事项。 #### 一、理解...

    linux mysql中文乱码问题解决

    ### Linux MySQL中文乱码问题解决 #### 背景与问题描述 在使用Linux系统部署MySQL数据库时,可能会遇到中文字符显示为乱码的问题。这一现象通常发生在对含有中文字符的数据进行读取或写入操作时。中文乱码不仅影响...

    MySQL + JDBC彻底解决中文乱码问题

    ### MySQL + JDBC 彻底解决中文乱码问题 #### 一、引言 在使用 MySQL 数据库进行数据存储时,可能会遇到中文字符显示为乱码的问题。这种情况通常出现在数据库连接参数配置不当或数据库本身的字符集设置不正确时。...

    PHP+MySql中文乱码解决方案

    2. **创建表时选择的编码与网页编码不一致**:在创建MySQL表时可以选择不同的字符集,如果这个字符集与网页编码不一致,也可能导致乱码。 3. **字段编码与网页编码不一致**:在创建表字段时也可以指定编码,如果不...

    jsp+servlet+mysql乱码解决的这天

    jsp+servlet+mysql乱码解决方案 jsp+servlet+mysql乱码解决方案是指在使用jsp+servlet+mysql开发web应用程序时,如何解决中文乱码问题的解决方案。该方案通过设置每个页面的编码格式为utf-8,控制器servlet中的请求...

    解决Mysql数据库在web开发中乱码问题

    在Web开发中,尤其是使用MySQL数据库进行数据存储时,字符编码问题经常会导致中文或特殊字符显示为乱码,严重影响用户体验和数据的准确性。本文将详细探讨如何解决MySQL数据库在Web开发中的乱码问题,确保数据在各个...

    hibernate+mysql乱码问题

    在数据库层面,MySQL的编码格式对数据存储和检索至关重要。如果数据库、表或列的字符集不匹配,或者与应用程序的编码设置不一致,就可能导致乱码。例如,`set names gbk` 是MySQL中设置客户端、连接和结果集编码为...

Global site tag (gtag.js) - Google Analytics