相关疑难解决方法(0)

MySQL:大型VARCHAR与TEXT?

我在MySQL中有一个消息表,用于在用户之间记录消息.除了典型的id和消息类型(所有整数类型),我需要将实际的消息文本保存为VARCHAR或TEXT.我设置的前端限制为3000个字符,这意味着消息永远不会插入到数据库中,因为它比这更长.

是否有理由使用VARCHAR(3000)或TEXT?有一些关于编写VARCHAR(3000)的东西,感觉有点违反直觉.我已经浏览了Stack Overflow上的其他类似帖子,但是能够获得特定于此类公共消息存储的视图.

mysql varchar text messages

824
推荐指数
6
解决办法
45万
查看次数

MySQL中的utf8mb4和utf8字符集有什么区别?

MySQL中utf8mb4utf8charsets有什么区别?

我已经知道ASCII,UTF-8,UTF-16UTF-32编码; 但我很想知道utf8mb4编码组与MySQL服务器中定义的其他编码类型的区别.

是否有任何特殊利益/建议使用utf8mb4而不是utf8

mysql encoding utf-8 character-encoding utf8mb4

294
推荐指数
5
解决办法
16万
查看次数

为什么文本列在MySQL中没有默认值?

如果您尝试在表上创建TEXT列,并在MySQL中为其提供默认值,则会出现错误(至少在Windows上).我看不出文本列不应该有默认值的任何原因.MySQL文档没有给出解释.这对我来说似乎不合逻辑(有点令人沮丧,因为我想要一个默认值!).有谁知道为什么不允许这样做?

mysql default-value

164
推荐指数
7
解决办法
13万
查看次数

MySQL中的VARCHAR与TEXT

我有两个字段:一个用于存储excerpt最大为500个字符的字段,另一个用于存储description最大为10,000个字符的字段.

我应该使用哪些数据类型,TEXT或者VARCHAR?为什么?

在MySQL 5.0.3 VARCHAR之后接受~65000个字符.但这并没有说明为什么我应该使用一种类型或另一种类型.

我的推理,我应该使用VARCHAR的摘录,因为我可以指定一个大小的限制,并TEXTdescription外地,因为它的大.

mysql database datafield

20
推荐指数
3
解决办法
1万
查看次数

数据适合行时的VARCHAR vs TEXT性能

mysql> desc temp1;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| value | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

mysql> desc temp2;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| value | text | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

255-每行中有一个“ a”字符(在两个表中)

mysql> select * from temp1 limit 1;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| value                                                                                                                                                                                                                                                           |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

mysql> select …
Run Code Online (Sandbox Code Playgroud)

mysql database performance innodb mysql-5.7

9
推荐指数
1
解决办法
343
查看次数

MySQL Workbench TEXT() 列参数

我通常不使用 MySQL 工作台,我试图通过选择 TEXT() 创建一个带有文本列的表,但是我不确定应该在“()”之间放入什么值。如果我把它留空,它会给我错误:

给定的数据类型 TEXT() 包含错误,不能被接受。而是保留以前的值。

我可以在括号内放一个数字,但我想知道它如何影响列。

我在网上找不到任何答案。我知道它如何影响诸如 DATETIME() 之类的事情,但不知道这种数据类型。

mysql

7
推荐指数
1
解决办法
6508
查看次数

MySQL:列大小限制

我目前正在开发Windows操作系统,我已经安装了MySQL社区服务器5.6.30,一切都很好.我有一个初始化数据库的脚本,并且一切正常.

现在我正在尝试在Linux环境中运行此脚本 - 相同的MySQL版本 - 我收到以下错误:

第3行的错误1074(42000):列'txt'的列长太大(max = 21845); 请改用BLOB或TEXT

脚本 -

DROP TABLE IF EXISTS text;
CREATE TABLE `texts` (
  `id` BINARY(16) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
  `txt` VARCHAR(50000) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

显然我的Windows操作系统上有一些我需要在Linux上复制的MySQL服务器配置; 任何人都可以分享想法吗?

更新1

在AWS的RDS上,它也可以工作,我非常确定它只是一个基于Linux的服务,所以显然它只是一个配置问题.

有没有人知道如何用UTF8达到varchar 50k?我不想使用TEXT或MEDIUMTEXT或其他任何东西,只是普通的旧varchar(大小)

更新2

我很欣赏所提出的不同的解决方案,但我不寻找新的解决方案我只是寻找答案,为什么varchar(50k)在Windows下工作,在linux下它没有.顺便说一句,我使用字符集UTF8和collat​​ion utf8_general_ci.

回答

回答我自己的问题,它是SQL_MODE的问题,它被设置为STRICT_TRANS_TABLES并且应该被删除.

mysql sql database innodb

6
推荐指数
2
解决办法
8704
查看次数