草庐IT

varchar_number

全部标签

mysql - 如何更改所有已创建列的默认字符串长度 (varchar)?

当您在Rails中创建迁移并指定字符串时,默认情况下,列长度为255。有没有办法将创建的所有未指定长度的列设置为默认为其他数字?一般来说255没问题,但在我的情况下,我需要将字符串列的编码切换为utf8mb4,当我这样做时,索引会中断,因为索引不能超过767字节:Mysql2::错误:指定的键太长;最大key长度为767字节因为utf8存储为3个字节,所以3*255=765,但是utf8mb4是4个字节,所以4*255=1020,这将失败。因此,一旦我将database.yml更改为使用utf8mb4编码,当我重新加载模式时,当他们尝试加载索引时,事情就会失败。

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

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

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

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

php - SQLSTATE[HY093] : Invalid parameter number

这个问题在这里已经有了答案:PHPPDOException:"SQLSTATE[HY093]:Invalidparameternumber"(4个答案)关闭8年前。我在使用搜索查询时遇到了一些问题。我收到这个错误。SQLSTATE[HY093]:参数号无效这是我的代码。prepare($sql);$query->execute(array(':search'=>strip_tags($_POST['search'])));$result=$query->fetchAll(PDO::FETCH_ASSOC);foreach($resultas$row){$name=$row['name'

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

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

java.sql.PreparedStatement.setString 函数使 Varchars 与 double 混淆

我有一个用java编写的servlet/tomcat服务器。我有一个我编写的mysql类,我一直在使用其中的函数使用jdbc将准备好的语句插入到mysql数据库中。我调用的函数使用java.sql.PreparedStatement.setString来设置准备好的语句的参数。这已经连续几个月完美地处理了数千种不同的输入。但是最近,当尝试使用函数将ip地址插入VARCHAR类型的mysql列时,我收到如下异常抛出:com.mysql.jdbc.MysqlDataTruncation:Datatruncation:TruncatedincorrectDOUBLEvalue:'10.1.1

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_

PHP + PDO/MySQL : how to automatically query to find out VARCHAR field lengths?

有没有办法用PHP+PDO查询MySQL数据库,找出某些VARCHAR字段的列宽?如果可能的话,我不想将它们硬编码到我的PHP文件中。(目的:确定要插入到这些列中或与列中的现有数据进行比较的字符串的最大长度。) 最佳答案 只需查询information_schema.columns表并过滤出您需要的行。您要查找的值存储在“CHARACTER_MAXIMUM_LENGTH”下。 关于PHP+PDO/MySQL:howtoautomaticallyquerytofindoutVARCHARf

mysql - 我可以将 VARCHAR 默认值设置为 NULL 吗?

在mysql中,我尝试像这样更改现有表:ALTERTABLE`etexts`CHANGE`etext``etext`VARCHAR(100)CHARACTERSETlatin1COLLATElatin1_swedish_ciNOTNULLDEFAULTNULL我得到了回复:#1067-Invaliddefaultvaluefor'etext'为什么? 最佳答案 自相矛盾……NOTNULL,但是让它默认NULL……删除DEFAULTNULL并将NOTNULL更改为NULL:ALTERTABLE`etexts`CHANGE`etext`

mysql - MySQL中将字符串存储为varchar的内存占用

我开始对MySQL的内存使用很感兴趣。所以我在这里看这个:http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html我对节省内存的前景感到非常兴奋(例如)只需要一个带符号的smallint,而我在许多地方使用的是unsignedint。然后我阅读了有关varchars的内容...“VARCHAR(M)-如果列值需要0–255字节,则长度+1字节”什么?!现在在我看来,好像存储单个varchar会耗尽大量内存,我什至可能不会对我的int与smallint感到兴奋,因为它被大大掩盖了通过varchar字段。所以我来这里问