【问题标题】:Does TEXT datatype will limit the length ?TEXT 数据类型是否会限制长度?
【发布时间】:2016-02-18 06:42:38
【问题描述】:

我在MySQL 中使用TEXT 数据类型。但是当我查看专栏时,我只看到fndjdjjj jdjejcdjj sekifkj sjkedkjfj sjekkcjej jwj...。在 jwj 之后,它应该有另一个文本,但我得到......为什么会发生这种情况?我以为 TEXT 可以有无限大小?

我正在使用 android ,并与 MySQL PHP 连接。

【问题讨论】:

    标签: android mysql text sqldatatypes


    【解决方案1】:

    使用长文本。

    以下是限制

    类型 |最大长度 -----------+------------------------- 小文本 | 255 (2 8-1) 个字节 正文 | 65,535 (216−1) 字节 = 64 KiB 中文本 | 16,777,215 (224-1) 字节 = 16 MiB 长文 | 4,294,967,295 (232−1) 字节 = 4 GiB

    【讨论】:

    • 如果我已经在 MySQL 中有数据。更改为 LONGTEXT 后,我的列中的数据会被删除吗?
    • 如果现有字段是 TEXT,则在您的 MySQL 中,您将拥有仅允许其长度的数据。如果你想改变,你应该改变你的数据可能会受到影响的 tableStructure。考虑备份并将其迁移到更新的结构
    • 我已经改成LongText,然后我再次插入文字,文字仍然有限
    • 检查是否尝试插入 unicode 文本。并且您的表的字符集设置为 latin1。将您的表格字符集更改为 utf-8。 ALTER TABLE tablename {.....} CONVERT TO CHARACTER SET utf8;更多信息dev.mysql.com/doc/refman/5.1/en/alter-table.html
    【解决方案2】:

    TINYTEXT 限制为 255 个字节。注意插入期间的截断。请注意,ALTER 之后的数据是完整的。请注意,我使用的是MODIFY,而不是CONVERT TO

    mysql> CREATE TABLE so35474581 ( t TINYTEXT CHARACTER SET latin1 );
    Query OK, 0 rows affected (0.24 sec)
    
    mysql> INSERT INTO so35474581 (t) SELECT repeat('x', 444);
    Query OK, 1 row affected, 1 warning (0.04 sec)
    Records: 1  Duplicates: 0  Warnings: 1
    
    mysql> SHOW WARNINGS;
    +---------+------+----------------------------------------+
    | Level   | Code | Message                                |
    +---------+------+----------------------------------------+
    | Warning | 1265 | Data truncated for column 't' at row 1 |
    +---------+------+----------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT LENGTH(t), CHAR_LENGTH(t) FROM so35474581;
    +-----------+----------------+
    | LENGTH(t) | CHAR_LENGTH(t) |
    +-----------+----------------+
    |       255 |            255 |
    +-----------+----------------+
    1 row in set (0.00 sec)
    
    mysql> ALTER TABLE so35474581 MODIFY t LONGTEXT CHARACTER SET latin1;
    Query OK, 1 row affected (0.31 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> SELECT LENGTH(t), CHAR_LENGTH(t) FROM so35474581;
    +-----------+----------------+
    | LENGTH(t) | CHAR_LENGTH(t) |
    +-----------+----------------+
    |       255 |            255 |
    +-----------+----------------+
    1 row in set (0.00 sec)
    

    提到的CONVERT TO 与更改字符集有关。

    当插入超过几 MB 的内容时,您可能会遇到 packet_size 或其他设置的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 2013-09-21
      相关资源
      最近更新 更多