4 ответов:
Вы можете, но вы потеряете мобильность. Используйте
columnDefinitionатрибут и установите его вinteger unsigned. Фактический код зависит от того, что вы используете.columnDefinition: фрагмент DDL SQL, который начинается после имени столбца и указывает полный (непортативный!) определение столбца. Этот атрибут позволяет использовать расширенные функции RMDBS. Однако вы следует тщательно использовать эту особенность и последствия. SchemaTool не будет обнаруживать изменения в столбце правильно больше, если вы используете "columnDefinition".
/** * @ORM\Column(name="id", type="integer", options={"unsigned"=true}) */нет места в документе (который я видел), который говорит об этом, но он работает.
обновление
определение в Yaml (начиная с 2.4 для первичного ключа)
id: type: integer options: unsigned: true
десятичные числа позволят Для таких больших чисел и позволяют сохранить SchemaTool, просто установите масштаб в 0.
<?php /** * @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true) */ Protected $facebookId;проверка полной записи о том, почему здесь. [EDIT] (ссылка не работает) я вставил статью ниже. Это было написано мной в любом случае ;)
беззнаковые числа так велики, что ваш мозг взорвется! ж/учение 2
Ормы имеют неотъемлемую проблему. Как вы берете тип данных только некоторые РСУБД поддерживают и позволяют вы можете использовать его в любом случае. Ну, когда дело доходит до доктрины 2 и беззнаковых чисел, они немного ленились.
все, что я хочу сделать, это сохранить мои 64-битные идентификаторы facebook. Насколько это сложно? Ну, моя СУБД-это mySQL, поэтому все, что мне действительно нужно, это неподписанный bigint.
<?php /** * @Column(type="bigint", nullable=false, unique=true, columnDefinition="unsigned") */ Protected $facebookId;Это, кажется, найти и денди, пока вы читаете это:
columnDefinition: фрагмент DDL SQL, который начинается после имени столбца и указывает полный (непортативный!) определение столбца. Этот атрибут позволяет используйте расширенные функции RMDBS. Однако вы должны тщательно использовать эту функцию и последствия. SchemaTool больше не будет обнаруживать изменения в столбце правильно, если вы используете "columnDefinition". В основном эта функция позволяет вам свободно формировать неподдерживаемые вещи в определении столбца. Создание беззнаковых чисел технически не поддерживается! Не говоря уже о моей разработки и развертывания систем качества в значительной степени зависят от SchemaTool. Мы можем поблагодарить комбинацию ленивых разработчиков в Doctrine и sqlite3 для этого маленького самородка сумасшедшего города.
это сразу же вызвало поиск google. Я не люблю думать без необходимости. Что я нашел? Все используют варчары. ВАРЧАРЫ!?!? У меня чуть сердечный приступ не случился. Это было просто неприемлемо.
таким образом вводится десятичное число. Это прекрасно. Размер хранилища является переменным, и он хранится в двоичном формате, поэтому индексирование очень быстро. Мы просто устанавливаем десятичную точность на ноль и вуаля. ORM может переносить это на любую СУБД, он достаточно большой для нам не нужно заботиться о неподдерживаемой подписанной/неподписанной проблеме, и это молниеносно. типа decimal(20,0) должен обрабатывать наш размер facebook восемнадцать квинтиллионов четыреста сорок шесть квадриллионов семьсот сорок четыре триллиона семьдесят три миллиарда семьсот девять миллионов пятьсот пятьдесят одна тысяча шестьсот пятнадцать весьма приятно.
<?php /** * @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true) */ Protected $facebookId;
доктрина 1 документации и доктрина 2 документации сказал, что вы можете сделать это таким образом:
аннотаций PHP:
/** * @Column(type="integer", name="some_field" options={"unsigned":true}) */ protected $someField;Yaml: ( см. docs)
MyEntity: fields: someField: type: integer column: some_field options: unsigned: trueнадеюсь, это поможет кому-то сэкономить время ;)
Comments