数据长度怎么限制啊?

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

会超过 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');

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

7年前 评论
讨论数量: 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');

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

7年前 评论
leo

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

7年前 评论

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

7年前 评论

会超过 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');

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

7年前 评论

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