数据长度怎么限制啊?

我的name字段是限制了长度为10的,在执行php artisan db:seed会报错说SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'name' at row 21

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

会超过 10 长度的原因

刚刚看了下源码,这个长度还真限制不了,他默认是 firstName lastName 拼接出来的名字,这个名字的源数据又是从 vendor/fzaninotto/faker/src/Faker/Provider/en_US/Person.php 中取来的,按照它里面的名字,比如 firstName 中的 Alessandro 这个名字就 10 个字符了,再加上 lastName 肯定会超过 10 的长度。

解决方法有两个:

  • 将 $faker->name 的结果进行字符串截取,只取前 10 个字符,不过名字可能就变得莫名其妙了,这个办法比较简单,反正英文名字本来就看着莫名其妙。

  • 使用 中文 的 Faker

中文的数据源来自 vendor/fzaninotto/faker/src/Faker/Provider/zh_CN/Person.php ,看了下,应该名字没有超过 3 个汉字的,如果数据库是 utf-8 编码的话就不会超过 10 的长度了。

配置中文的方法

Factory 中使用中文
可以直接在 config\app.php 中添加配置 faker_locale => 'zh_CN' ,就可以使用中文,不过中文只支持下面几种源数据

file

可以在 Illuminate\Database\DatabaseServiceProvider 中看到,Laravel 在注册的时候传入了语言参数

file

所以直接配置 faker_locale => 'zh_CN' 就可以了。

自己初始化 Faker\Factory 使用中文

$faker = Faker\Factory::create('zh_CN');

可以参考我写的一篇关于数据填充的文章

6年前 评论
讨论数量: 3

会超过 10 长度的原因

刚刚看了下源码,这个长度还真限制不了,他默认是 firstName lastName 拼接出来的名字,这个名字的源数据又是从 vendor/fzaninotto/faker/src/Faker/Provider/en_US/Person.php 中取来的,按照它里面的名字,比如 firstName 中的 Alessandro 这个名字就 10 个字符了,再加上 lastName 肯定会超过 10 的长度。

解决方法有两个:

  • 将 $faker->name 的结果进行字符串截取,只取前 10 个字符,不过名字可能就变得莫名其妙了,这个办法比较简单,反正英文名字本来就看着莫名其妙。

  • 使用 中文 的 Faker

中文的数据源来自 vendor/fzaninotto/faker/src/Faker/Provider/zh_CN/Person.php ,看了下,应该名字没有超过 3 个汉字的,如果数据库是 utf-8 编码的话就不会超过 10 的长度了。

配置中文的方法

Factory 中使用中文
可以直接在 config\app.php 中添加配置 faker_locale => 'zh_CN' ,就可以使用中文,不过中文只支持下面几种源数据

file

可以在 Illuminate\Database\DatabaseServiceProvider 中看到,Laravel 在注册的时候传入了语言参数

file

所以直接配置 faker_locale => 'zh_CN' 就可以了。

自己初始化 Faker\Factory 使用中文

$faker = Faker\Factory::create('zh_CN');

可以参考我写的一篇关于数据填充的文章

6年前 评论
leo

自己检查下 seed 数据里是不是有 name 长度大于 10 的

6年前 评论

@leo 用的是$faker->name自动生成的,怎么限制它的长度?

6年前 评论

会超过 10 长度的原因

刚刚看了下源码,这个长度还真限制不了,他默认是 firstName lastName 拼接出来的名字,这个名字的源数据又是从 vendor/fzaninotto/faker/src/Faker/Provider/en_US/Person.php 中取来的,按照它里面的名字,比如 firstName 中的 Alessandro 这个名字就 10 个字符了,再加上 lastName 肯定会超过 10 的长度。

解决方法有两个:

  • 将 $faker->name 的结果进行字符串截取,只取前 10 个字符,不过名字可能就变得莫名其妙了,这个办法比较简单,反正英文名字本来就看着莫名其妙。

  • 使用 中文 的 Faker

中文的数据源来自 vendor/fzaninotto/faker/src/Faker/Provider/zh_CN/Person.php ,看了下,应该名字没有超过 3 个汉字的,如果数据库是 utf-8 编码的话就不会超过 10 的长度了。

配置中文的方法

Factory 中使用中文
可以直接在 config\app.php 中添加配置 faker_locale => 'zh_CN' ,就可以使用中文,不过中文只支持下面几种源数据

file

可以在 Illuminate\Database\DatabaseServiceProvider 中看到,Laravel 在注册的时候传入了语言参数

file

所以直接配置 faker_locale => 'zh_CN' 就可以了。

自己初始化 Faker\Factory 使用中文

$faker = Faker\Factory::create('zh_CN');

可以参考我写的一篇关于数据填充的文章

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!