更改续集列字符串大小

时间:2018-02-07 09:26:33

标签: ruby sequel

我想更改字符串colums'迁移的大小。

我试过

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.easyschools.student.HomeActivity">

<FrameLayout
    android:id="@+id/main_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/navigation"
    android:layout_alignParentTop="true">
 </FrameLayout>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginEnd="0dp"
    android:layout_marginStart="0dp"
    android:background="@android:color/white"
    android:layout_alignParentBottom="true"
    app:menu="@menu/navigation"/>

</RelativeLayout>

但是这给我一个SQL语法错误迁移:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/nav_messages"
        android:icon="@drawable/msg_icon"
        android:title=""/>

    <item
        android:id="@+id/nav_home"
        android:icon="@drawable/home_icon"
        android:title=""
        android:checked="true"/>

    <item
        android:id="@+id/nav_notify"
        android:icon="@drawable/notify_icon"
        android:title=""/>

    <item
        android:id="@+id/nav_my_profile"
        android:icon="@drawable/user_icon"
        android:title=""/>
</menu>

有什么办法吗? 所以目前该字段是一个大小为20的字符串,我希望它是一个大小为30的字符串。

提前致谢!

UPDATE 我也试过

Sequel.migration do
  up do
    alter_table(:users) do
      set_column_type :car_model, :string, size: 30
    end
  end

  down do
  end
end

然而,这会导致我获得Sequel::DatabaseError: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'String(30) NULL' at line 1 列:/

2 个答案:

答案 0 :(得分:2)

你几乎是对的。您需要使用String代替:string

set_column_type :car_model, String, size: 30

请注意,它使用的是varchar(30),而不是char(30)。一般情况下,除非您知道自己需要char,否则最好使用varchar

或者,只要您想强制使用特定于数据库的类型,就可以将其指定为字符串:

set_column_type :car_model, 'char(30)'

答案 1 :(得分:1)

我不知道续集,但在Postgres中你可以使用change_column:limit这样:

change_column :users, :car_model, :string, limit: 30

希望它有所帮助!