title: Limit the value of a MySQL datatype to a specific range (preferably not ENUM)
body: <p>I want to limit the datatype value that can be stored within a field to a specific range of integer values: [0,10].</p>
  
  <p>On user input within a PHP script I validate and sanitise the data to make sure it is within the range 0 to 10. However, is there a way to ensure this remains true within the votes table itself via some sort of datatype or constraint?</p>
  
  <p>At the moment I store the int value within an UNSIGNED TINYINT which of course has the range of 0-255. I am aware of ENUM as an option. However, I have read that it is not advisable when using numbers: <a href="http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/" rel="noreferrer">http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/</a></p>
  
  <p><strong>The SQL:</strong></p>
  
  <pre><code>CREATE TABLE votes (
  vote_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  article_id MEDIUMINT UNSIGNED NOT NULL,
  user_id MEDIUMINT UNSIGNED NOT NULL,
  user_vote TINYINT UNSIGNED NOT NULL,
  PRIMARY KEY (vote_id),
  FOREIGN KEY (article_id) REFERENCES articles (article_id) ON DELETE CASCADE ON UPDATE NO ACTION,
  FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
  CONSTRAINT article_uservoted UNIQUE KEY (user_id, article_id),
  INDEX vote_value (article_id, user_id, user_vote)
  ) ENGINE=INNODB;
  </code></pre>
  
  <p>I hope someone can assist.</p>