草庐IT

mysql - 为什么 MySQL VARCHAR 允许超过最大长度?

我用UTF-8VARCHAR(5000)创建了一个表,并用数据填充了它。但看起来这个字段允许的数据比指示的要多:mysql>DESCRIBEtest;+---------+------------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+---------+------------------+------+-----+---------+----------------+|id|int(10)unsigned|NO|PRI|NULL|auto_increment

mysql - 如何在 MySQL 列名中使用特殊字符?

这是我失败的MySQL代码:CREATETABLEproduct(idintNOTNULLAUTO_INCREMENT,'item-name'VARCHAR(255)NOTNULL,'item-description'TEXT,'listing-id'VARCHAR(50),PRIMARYKEY(id))错误是:Errorcreatingtable:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'item-name'

mysql - 如何将索引 varchar(255) 从 utf8 更改为 utf8mb4 并仍然保持在 767 最大 key 长度以下?

我有一个需要支持表情符号的mysql列,这意味着将utf8列转换为utf8mb4。但是我的varchar(255)不适合,只要该列被索引(不是唯一的)。如何保留索引并获取utf8mb4排序规则?我试图将长度减少到191,但不幸的是我的一些行更长并且我收到此错误:#1406-Datatoolongforcolumn'column_name'atrow33565(这不是很有帮助,因为我没有自动递增列,也不知道如何细化第33565行)。 最佳答案 我认为它与行的最大数据长度有关,存在这样的限制,至少对于我所知道的字符串数据类型。为避免这种

mysql - SQL创建表并设置自动增量值而不使用Alter table

例如我正在创建下表:CREATETABLEPersons(     IDintNOTNULLAUTO_INCREMENT,     LastNamevarchar(255)NOTNULL,     FirstNamevarchar(255),    Addressvarchar(255),     PRIMARYKEY(ID))据我所知,Autoincrement的值可以通过Altertable这样修改ALTERTABLEPersonsAUTO_INCREMENT=100;但是我只想知道有没有办法在建表的时候设置自动递增的值?这样的?CREATETABLEPersons(     ID

php - 您应该在 MySQL 中准确指定列类型吗?

当我在MySQL中定义列时,我通常使用int、varchar(255)、text和偶尔使用的bool值枚举。准确指定列类型而不是将它们保留在最大值有什么好处?例如,编码为MD5的密码字段永远不会超过32个字符,那么使用varchar(32)而不是varchar(255)是否有明显的性能提升? 最佳答案 根据themanual,给定实际长度的VARCHAR(N)对任何不超过255的N占用相同的空间量,因此使用32不会节省空间。但是,使用最能代表实际数据的类型有利于架构的清晰度和可读性。 关

MySQL:id号自增不一致

我想知道您是否遇到过当您在phpMyAdmin上单击“浏览”按钮时自动递增的ID编号未按正确顺序排列的问题-只有我这样吗?我在数据库表中设置不正确的东西?比如,当你在一个表中插入了一系列的数据,同时又删除了一些数据,那么当你在phpMyAdmin上查看这个表时,这些数据应该是按照这样的顺序出现的,id22428296300但在我的大多数表格中,它们并没有按顺序出现,而是以这样的方式出现,id24300229628如下图所示,我们可以做些什么来让ID以正确的顺序出现吗?编辑1:我想你们中的大多数人都误解了我在这里突袭的问题。我的意思是当您单击phpMyAdmin上的浏览​​器按钮以列出表

php - VARCHAR(4) 存储多于四个的字符

我有一个VARCHAR(4)列,它从可能超过4个字符的输入中接收数据。但这没关系,我让MySQL自然地(或者我认为)切断了字符的结尾。奇怪的是,当我稍后在PHP(使用PDO驱动程序)中查看数据库行结果时,显示的是整个字符串,而不仅仅是4个字符。奇怪的是,如果我在MySQLCLI上执行SELECT查询,它只返回4个字符。即使我执行mysqldump,也只显示4个字符。知道是什么导致了这种奇怪的不一致吗?请注意,这些字符都是数字。编辑:根据要求,这里有一些代表保存/获取方法的伪代码:存储:$data=array('name_first4'=>$fields['num'],//name_fi

PHP PDO mySQL 查询如果不存在则创建表

使用PHPPDO查询来执行mySQL查询。查询由从foreach()输入的大量信息组成;所以我回显了sql查询。问题出在这里,但我看不到。这是$sql的输出CREATETABLEIFNOTEXISTS`page`(`page_ID`INTAUTO_INCREMENTNOTNULL,`url`varchar(200)NOTNULL,`title`varchar(200),`subtitle`TEXT,`content`TEXT,`parent`varchar(10),`privacy`varchar(1),`status`varchar(1),`creation`varchar(30))

MySQL 错误 1215 (HY000) : Cannot add foreign key constraint

我已经到处查看有关此错误的信息并看到大量示例,但我仍然无法弄清楚我的脚本有什么问题。如果这是一个常见问题,我很抱歉,但到目前为止搜索它对我没有帮助。脚本如下:CREATEDATABASEIFNOTEXISTSventas;USEventasCREATETABLETIENDAS(nifvarchar(10)notnull,nombrevarchar(20),direccionvarchar(20),poblacionvarchar(20),provinciavarchar(20)check(provincia=upper(provincia)),codpostalint(5),PRIMA

mysql - 在同一个 SELECT 语句中组合两个 varchar 字段而不合并值

我的PHP文件中的SQL查询是SELECTstart_time,end_timeFROMdata;这将返回两个不同列中的两个varchar字段。现在我想把这些结合起来。所以我尝试了Selectstart_time+''+end_timeastimefromdata;这会返回一些数值。所以我尝试了:Selectcast(start_time+''+end_time)astimefromdata;如果我表中的数据是开始时间=上午8:00结束时间=上午9:30如何显示上午8:00-9:30 最佳答案 SelectCONCAT(start_